BUG_ON(HYPERVISOR_event_channel_op(&op) != 0 );
evtchn = op.u.bind_virq.port;
- if (!unbound_irq(evtchn))
- return -EINVAL;
+ if (!unbound_irq(evtchn)) {
+ evtchn = -EINVAL;
+ goto out;
+ }
evtchns[evtchn].handler = handler;
evtchns[evtchn].dev_id = dev_id;
irq_info[evtchn] = mk_irq_info(IRQT_VIRQ, virq, evtchn);
unmask_evtchn(evtchn);
+out:
spin_unlock(&irq_mapping_update_lock);
return evtchn;
}
{
spin_lock(&irq_mapping_update_lock);
- if (!unbound_irq(evtchn))
- return -EINVAL;
+ if (!unbound_irq(evtchn)) {
+ evtchn = -EINVAL;
+ goto out;
+ }
evtchns[evtchn].handler = handler;
evtchns[evtchn].dev_id = dev_id;
irq_info[evtchn] = mk_irq_info(IRQT_EVTCHN, 0, evtchn);
unmask_evtchn(evtchn);
+out:
spin_unlock(&irq_mapping_update_lock);
return evtchn;
}
spin_lock(&irq_mapping_update_lock);
if (unbound_irq(irq))
- return;
+ goto out;
op.cmd = EVTCHNOP_close;
op.u.close.port = evtchn;
evtchns[evtchn].handler = NULL;
evtchns[evtchn].opened = 0;
+out:
spin_unlock(&irq_mapping_update_lock);
}